home *** CD-ROM | disk | FTP | other *** search
- (*-----------------------------------------------------------------------------
-
- :Program. Coder
- :Author Klemens Meyer
- :Address. Sievershauser Str 3 3154 Edemissen/Oelerse
- :Copyright. Public Domain
- :Language. MODULA 2
- :Translator. M2Amiga V3.2d A+L
- :History. V 1.0 [Meyer] 19.06.89
- :Contents. Das Programm codiert eine beliebige Datei mit einem
- :Contents. beliebig langen Schlüssel.
- :Usage. Im CLI: Coder <FILE> <CODE>
-
- -----------------------------------------------------------------------------*)
-
- MODULE Coder;
-
- FROM SYSTEM IMPORT
- CAST;
-
- FROM Arts IMPORT
- TermProcedure,Terminate;
-
- FROM Arguments IMPORT
- NumArgs,GetArg;
-
- FROM FileSystem IMPORT
- File,Response,
- Lookup,Close,ReadChar,WriteChar;
-
- FROM InOut IMPORT
- Write,WriteString,WriteLn;
-
- FROM Str IMPORT
- Concat,Length;
-
-
-
-
- TYPE Byte = [0..7];
- ByteSet = SET OF Byte;
- String = ARRAY [0..80] OF CHAR;
-
-
- VAR txt,cde : File;
- len : INTEGER;
- file,code : String;
-
-
-
-
-
- PROCEDURE XOr (x,y : CHAR) : CHAR;
- (* :Input. zwei ASCII-Characters
- :Result. ASCII-Character
- :Semantic. Verknüpft die Chars bitweise Exklusiv-Oder *)
- BEGIN
- RETURN CAST(CHAR,CAST(ByteSet,x)/CAST(ByteSet,y));
- END XOr;
-
-
- PROCEDURE CloseAll;
- (* :Semantic. Abschlußprozedur. Schließt Ein- und Ausgabefile. *)
- BEGIN
- Close (txt);
- Close (cde);
- END CloseAll;
-
-
-
- PROCEDURE Kodiere (VAR code : ARRAY OF CHAR);
- (* :Input. Schlüssel
- :Semantic. kodiert Das File nach dem übergebenen Schlüssel.
- :Semantic. Dabei wird das gelesene Zeichen aus der Datei mit einem
- :Semantic. Zeichen des Schlüssels XOr - Verknüpft, und in die Ausgabe-
- :Semantic. datei geschrieben. Dann wird das nächste Zeichen aus der Datei
- :Semantic. gelesen und mit dem nächsten Zeichen des Schlüssels verknüpft.
- :Semantic. Wurde das letzte Zeichen des Schlüssels benutzt fährt die Pro-
- :Semantic. zedur mit dem ersten Zeichen fort. *)
- VAR c : CHAR;
- i,l : INTEGER;
- BEGIN
- l:=Length (code);i:=l;
- LOOP
- INC(i);IF i>=l THEN i:=0 END;
- ReadChar (txt,c);
- IF txt.eof THEN EXIT END;
- c:=XOr(c,code[i]);
- WriteChar(cde,c);
- END; (* LOOP *)
- END Kodiere;
-
-
-
-
- BEGIN (* MAIN *)
- IF NumArgs()#2 THEN
- WriteString ("Usage: Coder <FILE> <CODE>");WriteLn;
- Terminate(0);
- END; (* IF *)
- TermProcedure (CloseAll);
- GetArg(1,file,len);
- Lookup (txt,file,8196,FALSE);
- WriteString ("Lesefile: ");WriteString(file);
- IF txt.res#done THEN
- WriteString (" konnte nicht geöffnet werden!");WriteLn;
- Terminate(0);
- END; (* IF *)
- WriteLn;
- Concat (file,".cd");
- Lookup (cde,file,8196,TRUE);
- WriteString ("Schreibfile: ");WriteString (file);
- IF cde.res#done THEN
- WriteString (" konnte nicht geöffnet werden!");WriteLn;
- Terminate(0);
- END; (* IF *)
- WriteLn;
- GetArg(2,code,len);
- Kodiere (code);
- WriteString ("Kodierung beendet.");WriteLn;
- END Coder.
-